"""
### 套接字属性
>* sockfd.type      套接字类型
>* sockfd.family  套接字 地址类型
>* sockfd.getsockname() 获取套接字绑定地址
>* sockfd.fileno()  获取套接字的文件描述符
>* sockfd.getpeername()  获取链接套接字客户端地址
>* sockfd.setsockopt(level, option, value)
>  * 功能: 设置套接字选项
>  * 参数: level, 选项类别. sockfd.SOL_SOCKET  SOL开头的全都是, level是大选项,每个大选项下面还有若干个小选项option
>  *      option, 具体选项内容, 小选项, sockfd.IPPROTO_AH, IPPROTO, IPV6等等开头的全都是
>  *      value, 选项值
>* sockfd.getsockopt(level, option)
>  * 功能: 获取套接字选项值
>  *
"""

from socket import *

sockfd = socket()

# 设置端口可以立即重用, 这个情况是对于程序意外关闭,系统会为该程序保留端口一段时间, 这段程序必须在绑定端口之前设置,这个函数常用于开发时用
sockfd.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)

sockfd.bind(("127.0.0.1", 58693))

print(f"获取地址类型: {sockfd.family}")
print(f"获取套接字类型: {sockfd.type}")
print(f"获取绑定地址: {sockfd.getsockname()}")
print(f"获取文件描述符: {sockfd.fileno()}")
# print(f"获取连接端地址: {sockfd.getpeername()}")  # 只有tcp链接了,才能使用,否则报错
